<template>
  <!-- 公共导入的组件，导入的都是excel -->
  <!-- 全局组件 上传excel
    on-succcess 是个参数 读数据成功后触发函数，
    能拿到对应的数据字段 header results

  -->
  <upload-excel :on-success="handleSuccess" />
</template>

<script>
import { reqImportEmployee } from '@/api/employees'
export default {
  name: 'Import',
  computed: {
    type() {
      return this.$route.query.type
    }
  },
  mounted() {
    // router 跳转路由 route 路由信息
    // console.log(this.type)
    // console.log(this.formatExcelDate(43535, '-'))
  },
  methods: {
    // 四年一润 百年不润 || 四百年再润
    isLeapYear(year) {
      return (year % 4 === 0 && year % 100 !== 0 || year % 400 === 0)
    },
    formatExcelDate(numb, format) {
      // numb-1 闰年相关
      // 不是闰年就不需要减1 做的完善点加闰年判断
      const time = new Date((numb - 1) * 24 * 3600000 + 1) // 毫秒
      time.setYear(time.getFullYear() - 70)
      const year = time.getFullYear() + ''
      const month = time.getMonth() + 1 + ''
      // 在这里控制减一的逻辑 因为上面获取到了year 我们根据年份判断是否是闰年
      let date = time.getDate() + ''
      if (this.isLeapYear(year)) {
        // 闰年需要减1
        date = date - 1
      }
      if (format && format.length === 1) {
        return year + format + (month < 10 ? '0' + month : month) + format + (date < 10 ? '0' + date : date)
      }
      return year + (month < 10 ? '0' + month : month) + (date < 10 ? '0' + date : date)
    },
    async handleSuccess({ header, results }) {
      if (this.type === 'user') {
        // 专门处理员工导入
        const userRelations = {
          '入职日期': 'timeOfEntry',
          '手机号': 'mobile',
          '姓名': 'username',
          '转正日期': 'correctionTime',
          '工号': 'workNumber'
        }
        //   console.log(header, results)
        // 调用批量导入接口，需要注意对象数组，对象的键必须是英文
        // 但我们导入的对象是中文 所以要处理
        // 先把body的数据，对象数组拼出来
        const data = []
        results.forEach(item => {
          // console.log(item)
          // item是个对象 key值是中文的
          const obj = {}
          for (const key in item) {
            // key是中文的 需要转成英文的key
            // console.log(key, item[key])
            // 我们只需要把字段是入职日期和转正日期的转成对应的日期就可以了 在excel中这2个日期就是一串数字，需要调用我们前面封装的方法
            const englishKey = userRelations[key]
            // console.log(englishKey)
            // if (englishKey === 'timeOfEntry' || englishKey === 'correctionTime') {
            if (['timeOfEntry', 'correctionTime'].includes(englishKey)) {
              // 判断是入职日期和转正日期，则转化时间
              obj[englishKey] = this.formatExcelDate(item[key])
            } else {
              obj[englishKey] = item[key]
            }
          }
          data.push(obj)
        })
        //   console.log(data)
        // 发送请求导入员工
        await reqImportEmployee(data)
        // 跳回员工页 go(-1)也可以
        this.$router.back()
      }
    }
  }
}
</script>

<style>

</style>
